﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using STS.Model;
using System;

namespace STS.ViewModel
{
    public class TypLekarzaViewModel : BaseViewModel
    {
        private ObservableCollection<TypLekarza> _typLekarzaItems;
        public ObservableCollection<TypLekarza> TypLekarzaItems
        {
            get
            {
                if (_typLekarzaItems == null)
                {
                    _typLekarzaItems = new ObservableCollection<TypLekarza>();
                }
                return _typLekarzaItems;
            }
            set
            {
                _typLekarzaItems = value;
                NotifyPropertyChanged("TypLekarzaItems");
            }
        }

        public void FindTypLekarzaItems()
        {
            var typLekarzaDB = from typLekarza in ModelInstance.DataContext.TypLekarzaItems
                           select typLekarza;
            TypLekarzaItems = new ObservableCollection<TypLekarza>(typLekarzaDB);
            Debug.WriteLine("Znalazłem typy lekarzy, size = " + TypLekarzaItems.Count);
        }

        public TypLekarza FindTypLekarzaByIdTypLekarza(int typLekarzaID)
        {
            var typLekarzaDB = from typLekarza in ModelInstance.DataContext.TypLekarzaItems
                           where typLekarza.IdTypLekarza == typLekarzaID
                           select typLekarza;
            return typLekarzaDB.SingleOrDefault<TypLekarza>();
        }

        public void UpdateTypLekarza(TypLekarza updateTypLekarza)
        {
            TypLekarza old = FindTypLekarzaByIdTypLekarza(updateTypLekarza.IdTypLekarza);
            SetEntityPropertities(ref old, updateTypLekarza);
            SaveChangesToDB();
        }

        public void AddTypLekarza(TypLekarza typLekarza)
        {
            ModelInstance.DataContext.TypLekarzaItems.InsertOnSubmit(typLekarza);
            SaveChangesToDB();
            TypLekarzaItems.Add(typLekarza);
        }

        public void RemoveTypLekarza(TypLekarza typLekarza)
        {
            TypLekarzaItems.Remove(typLekarza);
            ModelInstance.DataContext.TypLekarzaItems.DeleteOnSubmit(typLekarza);
            SaveChangesToDB();
        }

        public void RemoveAllTypLekarza()
        {
            var typLekarzaDB = from typLekarza in ModelInstance.DataContext.TypLekarzaItems
                           select typLekarza;

            foreach (TypLekarza _typLekarza in typLekarzaDB)
            {
                ModelInstance.DataContext.TypLekarzaItems.DeleteOnSubmit(_typLekarza);
            }

            try
            {
                SaveChangesToDB();
                TypLekarzaItems.Clear();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }
        }

    }
}
